﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestUsuarioSOAP.wsUsuario;
using System.ServiceModel;

namespace TestUsuarioSOAP
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestCreaUsuario()
        {
            wsUsuario.UsuariosClient proxy = new wsUsuario.UsuariosClient();
            try
            {
                wsUsuario.Usuario resultado1 = proxy.CrearUsuarios(1, "10771868", "Administrador", "admin@ripley.com.pe", "admin", "A", 1);
                Assert.AreEqual("admin@ripley.com.pe", resultado1.email);
                Assert.IsNotNull(resultado1);

                wsUsuario.Usuario resultado2 = proxy.CrearUsuarios(2, "06823659", "Emboce", "emboce@ripley.com.pe", "Emboce", "A", 3);
                Assert.AreEqual("emboce@ripley.com.pe", resultado2.email);
                Assert.IsNotNull(resultado2);

                wsUsuario.Usuario resultado3 = proxy.CrearUsuarios(3, "07156987", "Gerente", "gerente@ripley.com.pe", "Gerente", "A", 2);
                Assert.AreEqual("gerente@ripley.com.pe", resultado3.email);
                Assert.IsNotNull(resultado3);

            }
            catch (FaultException<wsUsuario.ValidationException> ex)
            {
                Assert.AreEqual("SOAPUsuario: Error, El nombre de Usuario y/o DNI ya se encuentra registrado.", ex.Detail.ValidationError);
            }
            
        }

        [TestMethod]
        public void TestModificarUsuario()
        {
            wsUsuario.UsuariosClient proxy = new wsUsuario.UsuariosClient();
            wsUsuario.Usuario resultado1 = proxy.ModificarUsuario(1, "10771868", "admin@ripley.com.pe","A","Administrador" , "admin123", 1);
            Assert.AreEqual("admin@ripley.com.pe", resultado1.email);
            wsUsuario.Usuario resultado2 = proxy.ModificarUsuario(2, "10771869", "emboce@ripley.com.pe", "A", "Emboce", "emboce123", 3);
            Assert.AreEqual("admin@ripley.com.pe", resultado1.email);
            wsUsuario.Usuario resultado3 = proxy.ModificarUsuario(3, "10771860", "gerente@ripley.com.pe", "A", "Gerente", "gerente123", 2);
            Assert.AreEqual("admin@ripley.com.pe", resultado1.email);

        }

        [TestMethod]
        public void TestListarUsuario()
        {
            int id = 0;
            wsUsuario.UsuariosClient proxy = new wsUsuario.UsuariosClient();
            List<wsUsuario.Usuario> usuarioList = proxy.ListarUsuario().ToList();
            for (int i = 0; i < usuarioList.Count(); i++)
            {
                if (usuarioList[i].email == "emboce@ripley.com.pe")
                {
                    id = i;
                }
            }
            Assert.AreEqual("emboce@ripley.com.pe", usuarioList[id].email);
            
        }


        [TestMethod]
        public void TestEliminarUsuario_01()
        {
            try
            {
            wsUsuario.UsuariosClient proxy = new wsUsuario.UsuariosClient();
            proxy.EliminarUsuario(1);
            wsUsuario.Usuario resultado1 = proxy.ObtenerUsuario(1);
            Assert.IsNull(resultado1);
            }
            catch (FaultException<wsUsuario.ValidationException> ex)
            {
                Assert.AreEqual("SOAPUsuario : Error, Usuario no existente.", ex.Detail.ValidationError);
            }
            
        }

        [TestMethod]
        public void TestEliminarUsuario_02()
        {
            try
            {
                wsUsuario.UsuariosClient proxy = new wsUsuario.UsuariosClient();
                proxy.EliminarUsuario(2);
                wsUsuario.Usuario resultado = proxy.ObtenerUsuario(2);
                Assert.IsNull(resultado);
            }
            catch (FaultException<wsUsuario.ValidationException> ex)
            {
                Assert.AreEqual("SOAPUsuario : Error, Usuario no existente.", ex.Detail.ValidationError);
            }

        }

        [TestMethod]
        public void TestEliminarUsuario_03()
        {
            try
            {
                wsUsuario.UsuariosClient proxy = new wsUsuario.UsuariosClient();
                proxy.EliminarUsuario(3);
                wsUsuario.Usuario resultado = proxy.ObtenerUsuario(3);
                Assert.IsNull(resultado);
            }
            catch (FaultException<wsUsuario.ValidationException> ex)
            {
                Assert.AreEqual("SOAPUsuario : Error, Usuario no existente.", ex.Detail.ValidationError);
            }

        }
    }
}
